#!/bin/bash

install_zabbix_release_on_centos_or_rocky() {
  echo '为CentOS安装zabbix源...'

  # 下载 Zabbix 7.0 的 RPM 安装包（根据系统 ID 和版本号自动选择路径）
  # 安装 Zabbix 仓库的 RPM 包
  #
  # 重置 MariaDB 的 DNF 模块，避免版本冲突
  # 将 Zabbix 仓库配置文件中的源地址替换为阿里云镜像，提高下载速度
  # 将 Zabbix Agent2 插件仓库配置文件中的源地址也替换为阿里云镜像
  # 备份修改后的 Zabbix Agent2 插件仓库配置文件
  curl -O https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/7.0/${ID}/${VERSION_ID}/x86_64/zabbix-release-7.0-2.el${VERSION_ID}.noarch.rpm
  rpm -ivh zabbix-release-7.0-2.el${VERSION_ID}.noarch.rpm

  dnf module reset mariadb -y
  sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/yum.repos.d/zabbix.repo
  sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/yum.repos.d/zabbix-agent2-plugins.repo
  mv /etc/yum.repos.d/zabbix-agent2-plugins.repo /etc/yum.repos.d/zabbix-agent2-plugins.repo-bak
}

config_epel(){  #安装 epel-release 包，启用 EPEL 源
  # 安装 EPEL 仓库，并将其源地址更换为阿里云镜像，加快下载速度。
  # 同时注释掉 metalink 行，启用 baseurl。
  # 最后在 epel.repo 文件的 [epel] 段添加 excludepkgs=zabbix*，以避免安装 zabbix 相关软件包。
  dnf install epel-release -y
  sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
  sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
  sed -i '/^\[epel\]/a excludepkgs=zabbix*' /etc/yum.repos.d/epel.repo
}

config_firewalld_on_centos() {
  # 配置防火墙和关闭SELinux的脚本片段
  # 1. 检查firewalld服务是否正在运行，如果是，则开放80/tcp、10051/tcp和443/tcp端口，并重新加载防火墙配置。
  # 2. 通过修改/etc/selinux/config文件和setenforce命令，将SELinux设置为disabled（关闭）。
  echo ' 配置防火墙...'
  # 如果防火墙正在运行,配置防火墙
  if systemctl status firewalld | grep -q "active (running)"; then
    echo '配置防火墙...'
    firewall-cmd --permanent --add-port={80/tcp,10051/tcp,443/tcp}
    firewall-cmd --reload
  fi
  # 关闭selinux
  sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  setenforce 0
}

install_mariadb_release() {
  # 安装 MariaDB 官方软件源，指定 MariaDB 服务器版本为 11.0
  # 通过 curl 下载 mariadb_repo_setup 脚本并执行，自动配置 YUM/APT 源
  echo '安装mariadb源...'
  curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=11.0
}

init_database() {
  echo '初始化数据库...'
  # 此脚本片段用于在 MariaDB 数据库中为 Zabbix 监控系统初始化数据库环境：
  # 1. 创建名为 zabbix 的数据库，字符集为 utf8mb4，排序规则为 utf8mb4_bin。
  # 2. 创建本地用户 zabbix，并设置密码为 'gaoshanliuni'。
  # 3. 授予 zabbix 用户对 zabbix 数据库的所有权限。
  # 4. 设置全局参数 log_bin_trust_function_creators 为 1，以允许创建包含不安全函数的存储过程和函数。
  echo "create database zabbix character set utf8mb4 collate utf8mb4_bin;" | mariadb -uroot
  echo "create user zabbix@localhost identified by 'gaoshanliuni';" | mariadb -uroot
  echo "grant all privileges on zabbix.* to zabbix@localhost;" | mariadb -uroot
  echo "set global log_bin_trust_function_creators = 1;" | mariadb -uroot
  # 给数据库执行前面输出的语句
  # 导入初始化数据
  # 导入 Zabbix 初始化数据库表结构和数据
  zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mariadb --default-character-set=utf8mb4 -uzabbix -pgaoshanliuni zabbix
  # 配置 Zabbix Server 连接数据库的密码
  sed -i 's/# DBPassword=/DBPassword=gaoshanliuni/g' /etc/zabbix/zabbix_server.conf
  # 恢复 log_bin_trust_function_creators 参数为默认值 0
  echo "set global log_bin_trust_function_creators = 0;" | mariadb -uroot
}

centos_finsh() {
  echo '安装完成,启动服务...'
  # 重新启动服务
  systemctl restart zabbix-server zabbix-agent httpd php-fpm
  systemctl enable zabbix-server zabbix-agent httpd php-fpm
  notification
}


change_font() {
  # 替换字体
  echo "解决zabbix图表中文乱码问题"
  if [ -e "simkai.ttf" ]; then
    cp simkai.ttf /usr/share/zabbix/assets/fonts
    rm -f /usr/share/zabbix/assets/fonts/graphfont.ttf
    ln -s /usr/share/zabbix/assets/fonts/simkai.ttf /usr/share/zabbix/assets/fonts/graphfont.ttf
  else
    echo -e "\e[31m中文字体simkai.ttf不存在 \e[0m"
  fi

}

notification() {

 

  echo -e "\n\e[31m数据库root用户默认密码为空,zabbix用户默认密码 gaoshanliuni\e[0m"
  echo -e "\n\e[31zabbix oobe 数据库使用zabbix用户 默认密码 gaoshanliuni\e[0m"
  # 获取ip
  if command -v ip &> /dev/null; then
    # 使用ip命令获取IP地址并存储到ip变量
    ip=$(ip addr | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
  else
    # 使用ifconfig命令获取IP地址并存储到ip变量
    ip=$(ifconfig | grep -oP 'inet\s+\K[\d.]+')
  fi

  # 使用for循环打印IP地址,并在每次打印后输出 "ok"
  for i in $ip; do
    echo -e "\e[32m访问继续下一步操作:  http://$i/zabbix\e[0m"
  done

  echo -e "\e[32m默认用户名密码:  Admin / zabbix\e[0m"

}



# 获取操作系统信息
. /etc/os-release

# 判断是否为 CentOS
if [[ "$ID" == "centos" ]]; then
  # CentOS 安装
  VERSION_ID=$(echo "$VERSION_ID" | cut -d'.' -f1)
  config_epel
  install_zabbix_release_on_centos_or_rocky
  install_mariadb_release
  dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent MariaDB-server MariaDB-client MariaDB-backup MariaDB-devel langpacks-zh_CN git -y
  systemctl enable mariadb --now
  if systemctl is-active mariadb; then
    echo "MariaDB 安装成功。"
  else
    echo -e "\e[91mMariaDB 安装失败,怀疑是网络问题。使用以下命令安装 MariaDB 后重试: \e[0m"
    echo -e "\e[91m安装 MariaDB 源: curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=11.0\e[0m"
    echo -e "\e[91m安装 MariaDB: dnf install MariaDB-server MariaDB-client MariaDB-backup MariaDB-devel -y\e[0m"
    echo -e "\e[91m启动 MariaDB: systemctl enable mariadb --now\e[0m"
    exit 1
  fi
  change_font
  init_database
  config_firewalld_on_centos
  centos_finsh
else
  echo "脚本停止运行。"
  exit 1
fi
  

